package javaSenior.thread;

/**
 * @author Lenl
 * @version v1.0
 * @create 2021-06-02 21:05
 * @description 创建线程的第二种方法
 *
 * 实现Runnable接口
 * 1.创建一个实现了Runnable接口的类
 * 3.创建实现类的对象
 * 4.将此对象作为参数传递到Thread类的构造器中，创建Thread类的对象
 * 5.通过Thread类的对象调用start()
 *
 * 两种方式的比较：
 *  开发中优先选择实现Runnable接口的方式
 *  原因：1.实现的方式没有单继承的局限性
 *       2.更好地处理多个线程有共享资源的情况
 *  联系：都继承了Runnable接口，都需要重写run()，要执行逻辑声明在run()中。
 *
 * 线程生命周期：Thread.State: 新建-(调用start)就绪-(获取/失去<如yield>cpu执行权)运行-<阻塞>-死亡
 *
 *阻塞的情况：sleep(long time)、join()、等待同步锁、wait()、suspend()(挂起，已过时)
 *阻塞恢复到就绪：sleep()时间到了、join()结束、获取同步锁、notify/notifyAll（对应wait）、resume(对应suspend)
 *
 *
 */
public class RunnableTest {
    public static void main(String[] args) {
        MThread mt=new MThread();
        Thread t1=new Thread(mt);
        t1.setName("线程1");
        t1.start();
        //再创建一个线程遍历100内偶数
        Thread t2=new Thread(mt);
        t2.setName("线程2");
        t2.start();

    }
}

class MThread implements  Runnable{
    @Override
    public void run() {
        for (int i=0;i<100;i++){
            if(i%2==0){
                System.out.println(Thread.currentThread().getName()+":"+ i);
            }
        }
    }
}